﻿/******************************************************************************* 
  Copyright (C), 1988-2020, zeno Tech. Co., Ltd.
  Description:  Flash模块,接口通过对mtd字符设备操作实现，对mtd字符设备的操作是
                多线程不安全的，所以本接口多线程不安全。调用时要保证无其它线程
                对相应的flash有操作。
  Function List:   
              SYS_FlashInit()/SYS_FlashGetCaps()
                    |
                    |
                   \ / 
                SYS_FlashMap()
                    |
                    |
                   \ /      
    SYS_FlashEraseAll()/SYS_FlashErase()/SYS_FlashWrite()/SYS_FlashRead()
                    |
                    |
                   \ /                         
              SYS_FlashDeInit()
*******************************************************************************/
#ifndef SYS_FLASH_H 
#define SYS_FLASH_H 

#ifdef __cplusplus
extern "C" {
#endif

/*=============================================================================
                                 Includes                                  
==============================================================================*/
#include <sysComm.h>

/*=============================================================================
                               Macro Definition
==============================================================================*/


/*=============================================================================
                        Local Structures and Typedef 
==============================================================================*/

/*=============================================================================
                             extern  Variables                                  
==============================================================================*/

/*=============================================================================
                             Function Definition                                  
==============================================================================*/

/*******************************************************************************
  Function:     SYS_FlashMap
  Description:  将flash地址转换为对应的mtd分区指针 
  Input:        - addr: flash地址
                - cnt: 擦除长度
  Output:       无
  Return:       !NULL: 分区指针
                NULL: 失败
  Others:       无
*******************************************************************************/ 
void *SYS_FlashMap(unsigned int addr, unsigned int cnt);

/*******************************************************************************
  Function:     SYS_FlashPartitionInfo
  Description:  获取flash分区的起始地址与总长度 
  Input:        - addr: flash地址
                - cnt: 擦除长度
  Output:       - pAddr: flash分区的起始地址
                - pLen: flash分区的总长度
  Return:       0 :操作成功
                -1 :操作失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashPartitionInfo(unsigned int addr, unsigned int cnt,
                            unsigned int *pAddr, unsigned int *pLen);

/*******************************************************************************
  Function:     SYS_FlashWrite
  Description:  读flash 
  Input:        - hFlashMtd: flash分区句柄
                - addr: flash地址
                - cnt: 擦除长度
  Output:       - pBuf: 数据缓存
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashRead(void *hFlashMtd,
                  char *pBuf, 
                  unsigned int addr, 
                  unsigned int cnt);


/*******************************************************************************
  Function:     SYS_FlashWrite
  Description:  写flash 
  Input:        - hFlashMtd: flash分区句柄
                - addr: flash地址
                - cnt: 擦除长度
                - pBuf: 数据缓存
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashWrite(void *hFlashMtd,
                  char *pBuf, 
                  unsigned int addr, 
                  unsigned int cnt);


/*******************************************************************************
  Function:     SYS_FlashErase
  Description:  擦除flash 
  Input:        - hFlashMtd: flash分区句柄
                - addr: flash地址
                - cnt: 擦除长度
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashErase(void *hFlashMtd,
                   unsigned int addr, 
                   unsigned int cnt);


/*******************************************************************************
  Function:     SYS_FlashEraseAll
  Description:  擦除整个flash分区 
  Input:        - hFlashMtd: flash分区句柄
                - addr: flash地址
                - cnt: 擦除长度
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashEraseAll(void *hFlashMtd);


/*******************************************************************************
  Function:     SYS_FlashGetCaps
  Description:  获取flash属性
  Input:        - flashId: flash编号
  Output:       - pFlashCaps: flash属性
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashGetCaps(unsigned int flashId, SYS_flashCaps_t *pFlashCaps);


/*******************************************************************************
  Function:     SYS_FlashInit
  Description:  flash模块初始化
  Input:        无
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashInit(void);


/*******************************************************************************
  Function:     SYS_FlashSndInit
  Description:  flash模块次flash初始化
  Input:        无
  Output:       无
  Return:       0: 成功
                ~0: 失败
  Others:       无
*******************************************************************************/ 
int SYS_FlashSndInit(void);


/*******************************************************************************
  Function:     SYS_FlashDeInit
  Description:  flash模块注销
  Input:        无
  Output:       无
  Return:       无
  Others:       无
*******************************************************************************/
void SYS_FlashDeInit(void);

#ifdef __cplusplus
}
#endif
#endif /* SYS_FLASH_H */

